SSH隧道动态转发端口实现SOCKS代理 + HTTP代理 | 您所在的位置:网站首页 › python forward方法 › SSH隧道动态转发端口实现SOCKS代理 + HTTP代理 |
一、文章概要
实现效果:ssh连接远程服务器进行网络转发,本地服务连接网络代理环境:windows11需要工具:MobaXterm(ssh隧道端口转发),Privoxy(socks转http代理),一个云服务器
二、步骤
1. 用SSH从本地计算机连接远程主机
多种方法: 命令行:ssh -C -N -D LOCAL_ADDRESS:LOCAL_PORT USER@REMOTE_ADDRESSPuttyMobaXteam中的MobaSSHTunnel![]() 官网下载压缩包版本 http://www.privoxy.org/ 修改配置文件: 通过listen-address指定HTTP代理的监听地址和端口。默认privoxy的配置文件会带有这一项。其格式为:listen-address [ADDRESS]:[PORT] 默认值是:listen-address 127.0.0.1:8118 通过forward-socks5指定转发到socks代理默认privoxy的配置文件不会配置这一项。 forward-socks5支持的格式比较复杂,但是这里只需要简单的写成如下内容就可以了: forward-socks5 / [SOCKS_ADDRESS]:[SOCKS_PORT] . 其中“/”所在的位置是一个URL模式,与之匹配的URL都会转发到这个项目指定的socks代理。“/”这个值表示把所有请求都转发到socks5代理上去 例如:forward-socks5 / 127.0.0.1:9150 . 三、测试 1. 浏览器Chrome + Switchyomega:支持socks5代理 2. 命令行(Powershell)curl -Uri www.google.com -proxy http://127.0.0.1:8118 windows中的curl命令其实是包装的Invoke-WebRequest 3. python使用urllib3库进行测试 http代理测试代码: import urllib3 import json proxy_addr = 'http://127.0.0.1:8118' print(f'代理地址:{proxy_addr}') proxy = urllib3.ProxyManager(proxy_addr) resp = proxy.request('GET', 'https://httpbin.org/ip') print(resp.data.decode('utf-8'))socks代理测试代码: from urllib3.contrib.socks import SOCKSProxyManager import json proxy_addr = 'socks5://127.0.0.1:80' print(f'SOCKS5代理地址:{proxy_addr}') proxy = SOCKSProxyManager(proxy_addr) resp = proxy.request('GET', 'https://httpbin.org/ip') print(resp.data.decode('utf-8')) url = 'https://www.google.com' resp = proxy.request('GET', url) print(f'返回状态码:{resp.status}') 四、遇到的坑 1. ping不通但是浏览器能连上?简言之,就是ping走的是ICMP协议,在网络层(第三层),而ssr用的是socks代理是传输层 (第四层),上层协议无法对下层协议起作用,因此ping不通,但是通过http(超文本传输协议,应用层协议,在比socks代理层数更高)却可以访问。 大部分都不支持socks代理,而支持http代理 2. ssh隧道开启socks代理,其他代理隧道呢?HTTPS代理隧道开启https、WebSocket隧道开启ws、ICMP隧道 References建立和使用代理服务器 -doc文档 Privoxy教程使用详解_privoxy是什么东西_ZhaoYingChao88的博客-CSDN博客 |
CopyRight 2018-2019 实验室设备网 版权所有 |